

/**
 * 将时间戳格式化为可读的日期时间字符串
 * @param timestamp 时间戳
 * @returns 返回格式化后的日期时间字符串 2025-04-10 10:10
 */
export const formatDateTime = (timestamp: string | number | undefined | null | Date): string => {
  if (!timestamp) return '';

  let date: Date;

  // 如果已经是Date对象，直接使用
  if (timestamp instanceof Date) {
    date = timestamp;
  }
  // 如果是数字类型的时间戳，直接使用
  else if (typeof timestamp === 'number') {
    date = new Date(timestamp);
  }
  // 如果是字符串，需要处理iOS兼容性
  else {
    const timeStr = timestamp.toString();

    // 处理常见的时间格式，转换为iOS兼容格式
    let isoString = timeStr;

    // 如果是 "yyyy-MM-dd HH:mm:ss" 格式，转换为 "yyyy/MM/dd HH:mm:ss"
    if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(timeStr)) {
      isoString = timeStr.replace(/(\d{4})-(\d{2})-(\d{2})/, '$1/$2/$3');
    }
    // 如果是 "yyyy-MM-dd" 格式，转换为 "yyyy/MM/dd"
    else if (/^\d{4}-\d{2}-\d{2}$/.test(timeStr)) {
      isoString = timeStr.replace(/(\d{4})-(\d{2})-(\d{2})/, '$1/$2/$3');
    }
    // 如果是完整的GMT格式（如 "Tue Sep 16 2025 10:19:08 GMT+0800 (CST)"），直接使用
    // 这种格式通常是服务端返回的完整时间字符串，浏览器可以正确解析
    // 如果是ISO 8601格式（yyyy-MM-ddTHH:mm:ss），iOS原生支持，直接使用
    // 其他格式也直接尝试使用

    date = new Date(isoString);
  }

  // 检查日期是否有效
  if (isNaN(date.getTime())) {
    return '';
  }

  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');

  return `${year}-${month}-${day} ${hours}:${minutes}`;
};

